/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Controladores;

import DAOS.DAOTV;
import DAOS.DAOVehiculo;
import Modelos.TipoVehiculo;
import Modelos.Vehiculo;
import Vistas.VVehiculo;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Date;



public class ControladorVehiculo extends KeyAdapter implements ActionListener, KeyListener, ItemListener 

{
    
    static private VVehiculo vvehiculo;
    private DAOVehiculo vehiculoDAO;
    private ControladorTipoVehiculo controltv;
    private String codTipov;
    



    public ControladorVehiculo() 
    {
        vvehiculo = new VVehiculo();
        vehiculoDAO = new DAOVehiculo();
        vvehiculo.agregarListener(this);         
        vvehiculo.agregarItemListerner(this);
        vvehiculo.setLocationRelativeTo(null);
        vvehiculo.setVisible(true);
                
      
        enableBotones(false);
        
        vvehiculo.getBtnNuevo().setEnabled(true);
        vvehiculo.getBtnSalir().setEnabled(true);
        vvehiculo.getBtnBuscar().setEnabled(true);
        vvehiculo.getBtnCancelar().setEnabled(true);
        
        CargarTablaVehiculos();
      
        cargarComboBoxTipo();
        

    
        vvehiculo.getTxtPlaca().addKeyListener(new KeyAdapter()
    { 

        @Override
        public void keyTyped(KeyEvent e) 
        {           
            String Cadena=vvehiculo.getTxtPlaca().getText();
            if (Cadena.length()==6)
            {  
                e.consume();   
                return;
            } 
        }
                  
        @Override
        public void keyPressed(KeyEvent e) 
        {
            placakeyPressed(e);            
        }
    }
                 
                 
    );
        
        vvehiculo.getDchAnnio().addKeyListener(new KeyAdapter() 
        {
          @Override
          public void keyTyped(KeyEvent e) 
                {           
                    
                }
        }
        );
        
       vvehiculo.getTxtColor().addKeyListener(new KeyAdapter() 
       {
           @Override
          public void keyTyped(KeyEvent e) 
             {
               		if(Character.isDigit(e.getKeyChar())){ //validando que NO es numero
			e.consume(); //Desecha el caracter
		}
             }
       }
       );
       
//           vvehiculo.getTxtCodSocio().addKeyListener(new KeyAdapter() 
//       {
//           @Override
//          public void keyTyped(KeyEvent e) 
//             {
//               		if(Character.isAlphabetic(e.getKeyChar())){ //validando que NO es numero
//			e.consume(); //Desecha el caracter
//		}
//             }
//       }
//       );
           
            vvehiculo.getTxtCapacidad().addKeyListener(new KeyAdapter() 
       {
           @Override
          public void keyTyped(KeyEvent e) 
             {
               		if(Character.isAlphabetic(e.getKeyChar())){ //validando que NO es numero
			e.consume(); //Desecha el caracter
		}
             }
       }
       );
    }

    
   private void CargarTablaVehiculos()
   {
      
    int Fila;
    Vehiculo vehiculo=new Vehiculo();

    vehiculoDAO.getVehiculoLista().clear();
    vehiculoDAO.cargarVehiculos();
    DAOTV tvdaos = new DAOTV();
    TipoVehiculo tv = new TipoVehiculo();
    
    tvdaos.cargarTipoVehiculo();
    vvehiculo.getTabVehiculos().removeAll();
    for (Fila=0;Fila<vehiculoDAO.getVehiculoLista().size();Fila++)
    {
       vehiculo=vehiculoDAO.getVehiculoLista().get(Fila);

       vvehiculo.getTabVehiculos().setValueAt(vehiculo.getPlaca(), Fila, 0);
       vvehiculo.getTabVehiculos().setValueAt(vehiculo.getMarca(), Fila, 1);
       vvehiculo.getTabVehiculos().setValueAt(vehiculo.getModelo(), Fila, 2);
       vvehiculo.getTabVehiculos().setValueAt(vehiculo.getAnno(), Fila, 3);
       vvehiculo.getTabVehiculos().setValueAt(vehiculo.getColor(), Fila, 4);
      
       
        for(int i=0; i<tvdaos.getTv().size();i++)
    {
        tv=tvdaos.getTv().get(i);
        if(vehiculoDAO.getVehiculoLista().get(Fila).getCod_tipov().equals(tv.getCodigo()))
        {         
        vvehiculo.getTabVehiculos().setValueAt(tv.getDescripcion(), Fila, 5);
        vvehiculo.getTabVehiculos().setValueAt(vehiculo.getCodSocio(), Fila, 6);
         vvehiculo.getTabVehiculos().setValueAt(tv.getCapacidad(), Fila, 7);
         
        }  
    }         
     }   
   }
   
   
   public static void cargarComboBoxTipo()
   {
  
       
       vvehiculo.getCmbTipo().removeAllItems();
       vvehiculo.getCmbTipo().addItem("Seleccione el tipo de vehiculo");
       
       int fila;
       DAOTV tvdao = new DAOTV();
       tvdao.cargarTipoVehiculo();
       
       for (fila = 0; fila<tvdao.getTv().size();fila++)
       {
           String desc = tvdao.getTv().get(fila).getDescripcion();
           vvehiculo.getCmbTipo().addItem(desc);
       }
   }
   
   @Override
   public void itemStateChanged(ItemEvent e) {
        DAOTV tvdao = new DAOTV();
        tvdao.cargarTipoVehiculo();
    if (e.getStateChange() == e.SELECTED) {
			if (e.getSource().equals(vvehiculo.getCmbTipo())) {
				
				if (vvehiculo.getCmbTipo().getSelectedIndex() != 0) {
                                  
                                   for(int i=0;i<tvdao.getTv().size();i++)
                                   {
                                       if(tvdao.getTv().get(i).getDescripcion().equals(vvehiculo.getCmbTipo().getSelectedItem().toString()))
                                       {
                                           vvehiculo.getTxtCapacidad().setText(Integer.toString(tvdao.getTv().get(i).getCapacidad()));
                                           codTipov = tvdao.getTv().get(i).getCodigo();
                                       }
                                   }
                                    
                                }
                        }
    }
   }

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        String placa;
        Date anno;
        String marca;
        String modelo;
        String tipo;
        String codSocio;
        int capacidad;
        String color;
        
     if(e.getSource().equals(vvehiculo.getBtnNuevo()))
            {
               
                enableBotones(false);
                vvehiculo.getBtnAgregarTipo().setEnabled(true);
                vvehiculo.getBtnGuardar().setEnabled(true);
                vvehiculo.getBtnCancelar().setEnabled(true);
                
                enableTxt(true);
                Limpiar();
                vvehiculo.getTxtPlaca().setEnabled(true);
                vvehiculo.getTxtPlaca().requestFocus();


            
            } 
    if(e.getSource().equals(vvehiculo.getBtnCancelar()))
    {
     
         enableBotones(false);
         enableTxt(false);
                
                Limpiar();
                
                vvehiculo.getBtnCancelar().setEnabled(true);
                vvehiculo.getBtnBuscar().setEnabled(true);
                vvehiculo.getBtnNuevo().setEnabled(true);
                vvehiculo.getBtnSalir().setEnabled(true);
                
                vvehiculo.getTxtPlaca().setEnabled(true);
                vvehiculo.getTxtPlaca().requestFocus();
        
    }
        
   if (e.getSource().equals(vvehiculo.getBtnBuscar()))
   {
   String Cadena;
   int posiVehiculo;
   DAOTV tvdaos = new DAOTV();
  
   Vehiculo vehiculo=new Vehiculo();
   TipoVehiculo tve = new TipoVehiculo();
   Cadena =vvehiculo.getTxtPlaca().getText();
   vvehiculo.getTxtPlaca().setText(Cadena.toUpperCase());
      
   
   if (Cadena.length() > 0) 
       
   {
     
         vehiculo=vehiculoDAO.buscarVehiculo(Cadena); 
         
         vvehiculo.getTxtMarca().setText(vehiculo.getMarca());
          vvehiculo.getTxtModelo().setText(vehiculo.getModelo()); 
          vvehiculo.getDchAnnio().setDate(vehiculo.getAnno());
          
          vvehiculo.getTxtColor().setText(vehiculo.getColor());
          vvehiculo.getTxtCodSocio().setText(vehiculo.getCodSocio());
          
          String cadenatv=vehiculo.getCod_tipov();
          tve=tvdaos.buscarTipoVehiculo(cadenatv);
          cargarComboBoxTipo();
          for(int i=0;i<vvehiculo.getCmbTipo().getItemCount();i++)
            {
                      if(tve.getDescripcion().equals(vvehiculo.getCmbTipo().getItemAt(i)))
                      {
                          vvehiculo.getCmbTipo().setSelectedIndex(i);
                          vvehiculo.getTxtCapacidad().setText(Integer.toString(tve.getCapacidad()));
                      }
            }
         
          
          enableBotones(true);
          vvehiculo.getBtnGuardar().setEnabled(false);
          vvehiculo.getBtnNuevo().setEnabled(false);
          vvehiculo.getBtnAgregarTipo().setEnabled(true);
          enableTxt(true);
          vvehiculo.getTxtPlaca().setEnabled(false);
          
          
          
          
         vvehiculo.mostrarMensaje("El vehiculo ya existe");
      } 
      
//            else
//      {
// 
//          enableBotones(false);
//          vvehiculo.getBtnGuardar().setEnabled(true);
//          vvehiculo.getBtnCancelar().setEnabled(true);
//          vvehiculo.getBtnAgregarTipo().setEnabled(true);
//          enableTxt(true);
//          vvehiculo.getTxtMarca().requestFocus();
//          
//      }
      


   
            }
   
        if (e.getSource().equals(vvehiculo.getBtnGuardar()))
        {            
           //Validar Campos vacios
            
           if (vvehiculo.getTxtPlaca().getText().trim().length()==0)
           {
                vvehiculo.mostrarMensaje("El campo placa no puede estar vacio");
                vvehiculo.getTxtPlaca().requestFocus();
                return;
           }
           
           if (vvehiculo.getTxtMarca().getText().trim().length()==0)
           {
               vvehiculo.mostrarMensaje("El campo Marca no puede estar vacio");
               vvehiculo.getTxtMarca().requestFocus();
               return;
           }
           
           if (vvehiculo.getTxtModelo().getText().trim().length()==0)
           {
               vvehiculo.mostrarMensaje("El campo Modelo no puede estar vacio");
               vvehiculo.getTxtModelo().requestFocus();
               return;
           }
           
           if (vvehiculo.getDchAnnio().getDate().toString().trim().length()==0)
           {
               vvehiculo.mostrarMensaje("El campo Año no puede estar vacio");
               vvehiculo.getDchAnnio().requestFocus();
               return;
           }
                      

           if (vvehiculo.getTxtColor().getText().trim().length()==0)
           {
               vvehiculo.mostrarMensaje("El campo Color no puede estar vacio");
               vvehiculo.getTxtColor().requestFocus();
               return;
           }
           
               if (vvehiculo.getTxtCodSocio().getText().trim().length()==0)
           {
               vvehiculo.mostrarMensaje("El campo codigo de socio no puede estar vacio");
               vvehiculo.getTxtCodSocio().requestFocus();
               return;
           }  
           
           if (vvehiculo.getCmbTipo().getSelectedIndex() ==0)
           {
               vvehiculo.mostrarMensaje("Seleccione el tipo de vehiculo");
               vvehiculo.getCmbTipo().requestFocus();
               return;
           }
           
                        
            placa = vvehiculo.getTxtPlaca().getText();
            anno =  vvehiculo.getDchAnnio().getDate();
            marca = vvehiculo.getTxtMarca().getText();
            modelo = vvehiculo.getTxtModelo().getText();
            tipo = vvehiculo.getCmbTipo().getSelectedItem().toString();
            color = vvehiculo.getTxtColor().getText();
            codSocio = vvehiculo.getTxtCodSocio().getText();
           
                  
            
            
                      
           
           
            Vehiculo vehiculo = new Vehiculo(placa,marca,modelo,anno,color,codTipov,codSocio);
            vehiculoDAO.registrarVehiculo(vehiculo);
            CargarTablaVehiculos();
            vvehiculo.mostrarMensaje("Se ha agregado una nueva unidad de transporte");
            
            enableBotones(false);
            enableTxt(false);
            Limpiar();
            vvehiculo.getBtnBuscar().setEnabled(true);
            vvehiculo.getBtnNuevo().setEnabled(true);
            vvehiculo.getBtnCancelar().setEnabled(true);
            vvehiculo.getBtnSalir().setEnabled(true);

            vvehiculo.getTxtPlaca().setEnabled(true);
            vvehiculo.getTxtPlaca().requestFocus();
          
        }
        
            if(e.getSource().equals(vvehiculo.getBtnAgregarTipo()))
            {
             controltv = new ControladorTipoVehiculo();
             DAOTV tvdao = new DAOTV();
             tvdao.cargarTipoVehiculo();
              
            }
            
            if(e.getSource().equals(vvehiculo.getBtnSalir()))
            {
                vvehiculo.dispose();
            }
            
         
    } 
    

    private void placakeyPressed(KeyEvent e)    
{
   String Cadena;
   String posiVehiculo;
   Vehiculo vehiculo=new Vehiculo();
   Cadena =vvehiculo.getTxtPlaca().getText();
   vvehiculo.getTxtPlaca().setText(Cadena.toUpperCase());
      
   
   if (e.getKeyChar()==10 && Cadena.length() > 0) 
       
   {
      vehiculo=vehiculoDAO.buscarVehiculo(Cadena);
      if (vehiculo.getPlaca().trim().length()==0)
      {
        
         
         vvehiculo.getTxtMarca().setText(vehiculo.getMarca());
          vvehiculo.getTxtModelo().setText(vehiculo.getModelo()); 
          vvehiculo.getDchAnnio().setDate(vehiculo.getAnno());
          vvehiculo.getTxtColor().setText(vehiculo.getColor());
          vvehiculo.getTxtCodSocio().setText(vehiculo.getCodSocio());
          vvehiculo.getCmbTipo().setSelectedItem(vehiculo.getCod_tipov());
          
          
          enableBotones(true);
          enableTxt(false);
          vvehiculo.getTxtPlaca().setEnabled(false);
          vvehiculo.getBtnAgregarTipo().setEnabled(false);
          
          
          
         vvehiculo.mostrarMensaje("El vehiculo ya existe");
      } 
      
            else
      {
 
          enableBotones(false);
          vvehiculo.getBtnGuardar().setEnabled(true);
          vvehiculo.getBtnCancelar().setEnabled(true);
          vvehiculo.getBtnAgregarTipo().setEnabled(true);
          enableTxt(true);
          vvehiculo.getTxtMarca().requestFocus();
          
      }
      


   }

}
    
     private void enableTxt(boolean Status)    
    {
   vvehiculo.getTxtPlaca().setEnabled(!Status);
   vvehiculo.getDchAnnio().setEnabled(Status); 
   vvehiculo.getTxtColor().setEnabled(Status);
   vvehiculo.getTxtMarca().setEnabled(Status);
   vvehiculo.getTxtModelo().setEnabled(Status);
   vvehiculo.getTxtCodSocio().setEnabled(Status);
   vvehiculo.getCmbTipo().setEnabled(Status);
   vvehiculo.getTxtCapacidad().setEnabled(Status);
   }
    
    private void Limpiar()    
{
   vvehiculo.getTxtPlaca().setText("");
   vvehiculo.getDchAnnio().setDate(null); 
   vvehiculo.getTxtColor().setText("");
   vvehiculo.getTxtMarca().setText("");
   vvehiculo.getTxtModelo().setText("");
   vvehiculo.getTxtCodSocio().setText("");
   vvehiculo.getCmbTipo().setSelectedIndex(0);
   vvehiculo.getTxtCapacidad().setText("");
}    
    
    private void enableBotones(boolean Status)
    {
        vvehiculo.getBtnGuardar().setEnabled(Status);
        vvehiculo.getBtnActualizar().setEnabled(Status);
        vvehiculo.getBtnEliminar().setEnabled(Status);
        vvehiculo.getBtnCancelar().setEnabled(Status);
        vvehiculo.getBtnNuevo().setEnabled(Status);
        vvehiculo.getBtnBuscar().setEnabled(Status);
        vvehiculo.getBtnAgregarTipo().setEnabled(Status);
    }
   
    
    public static void limpiarComboBoxTipo()
   {
        
       vvehiculo.getCmbTipo().removeAll();
      
   }

//    public void annokeyTyped(KeyEvent evt) { 
//
//       String Cadena;
//       char Caracter;
//       
//       Cadena=vvehiculo.getTxtAnno().getText();
//       if (Cadena.length()==4)
//        {  
//          evt.consume();   
//          return;
//        }  
//       
//       Caracter=evt.getKeyChar();
//       if (Caracter<'0' || Caracter > '9')
//         evt.consume();
//         
//        }
    
    
}